class Solution{
public:
  vector<int> dailyTemperatures(vector<int> &T){

    stack<pair<int, int>> s;
    vector<int> ans(T.size());

    for(int i = 0; i < T.size(); ++i){
      if(s.empty()){
        s.emplace(make_pair(i, T.at(i)));
        continue;
      }
      if(s.top().second < T.at(i)){
        while(!s.empty() && s.top().second < T.at(i)){
          ans.at(s.top().first) = i - s.top().first;
          s.pop();
        }
      }
      s.emplace(make_pair(i, T.at(i)));
    }

    while(!s.empty()){
      ans.at(s.top().first) = 0;
      s.pop();
    }

    return ans;

  }
};